package kr.hkit.powerjava.chapter23;

public class ThreadControl {
	static void print(String msg) {
		String threadName = Thread.currentThread().getName(); //현재 나를 돌려준다...
		System.out.format("%s : %s%n", threadName,msg);
	}
	
	private static class MessageLoop implements Runnable {
		@Override
		public void run() {
			String[] message = { "Pride will hava a fall.",
					"Power is dangerous unless you have humility.",
					"Office changes manners.",
					"Empty vessels make the most sound." };
			for (int i = 0; i < message.length; i++) {
				print(message[i]);
				try {
					Thread.sleep(2000);
				} catch (InterruptedException e) {
					print("아직 끝나지 않았어요!");
				}
			}
		} //end of method run()
	} // end of class MessageLoop
	
	
	public static void main(String[] args) throws InterruptedException {
		int tries = 0; //시도횟수 
		
		ThreadControl.print("추가적인 스레드를 시작합니다."); //메인스레드..
		Thread t = new Thread(new MessageLoop());
		t.start();
		
		ThreadControl.print("추가적인 스레드가 끝나기를 기다립니다.");
		
		while(t.isAlive()) { //t가 아직 살아있냐? 8초동안 계속 체크됨.
			ThreadControl.print("아직 기다립니다.");
			t.join(1000);
			tries++;
			if (tries > 2) { //2초 동안 기다렸는데 아직도 alive면
				ThreadControl.print("참을 수 없네요!");
				t.interrupt(); //아직끝나지 않았음 출력될걸. 
				t.join(); //t가 종료될때까지 기다린다
			}
		}
		
		ThreadControl.print("메인 스레드 종료!");
	}
}
